2f7fa8d73fa9680df283444627209a31c5ef4acd,src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java,OptimizerConstrained,optimize,#ParForStatementBlock#ParForProgramBlock#OptTree#CostEstimator#ExecutionContext#,79
Before Change
// rewrite 1: data partitioning (incl. log. recompile RIX)
HashMap<String, PDataPartitionFormat> partitionedMatrices = new HashMap<String,PDataPartitionFormat>();
rewriteSetDataPartitioner( pn, ec.getVariables(), partitionedMatrices );
M1 = _cost.getEstimate(TestMeasure.MEMORY_USAGE, pn); //reestimate
// rewrite 2: remove unnecessary compare matrix
rewriteRemoveUnnecessaryCompareMatrix(pn, ec);
After Change
// rewrite 1: data partitioning (incl. log. recompile RIX)
HashMap<String, PDataPartitionFormat> partitionedMatrices = new HashMap<String,PDataPartitionFormat>();
rewriteSetDataPartitioner( pn, ec.getVariables(), partitionedMatrices, OptimizerUtils.getLocalMemBudget() );
double M0b = _cost.getEstimate(TestMeasure.MEMORY_USAGE, pn); //reestimate
// rewrite 2: remove unnecessary compare matrix
rewriteRemoveUnnecessaryCompareMatrix(pn, ec);
// rewrite 3: rewrite result partitioning (incl. log/phy recompile LIX)
boolean flagLIX = super.rewriteSetResultPartitioning( pn, M0b, ec.getVariables() );
double M1 = _cost.getEstimate(TestMeasure.MEMORY_USAGE, pn); //reestimate
LOG.debug(getOptMode()+" OPT: estimated new mem (serial exec) M="+toMB(M1) );
//determine memory consumption for what-if: all-cp or partitioned
double M2 = _cost.getEstimate(TestMeasure.MEMORY_USAGE, pn, LopProperties.ExecType.CP);
LOG.debug(getOptMode()+" OPT: estimated new mem (serial exec, all CP) M="+toMB(M2) );
double M3 = _cost.getEstimate(TestMeasure.MEMORY_USAGE, pn, true);
LOG.debug(getOptMode()+" OPT: estimated new mem (cond partitioning) M="+toMB(M3) );
// rewrite 4: execution strategy
PExecMode tmpmode = getPExecMode(pn); //keep old
boolean flagRecompMR = rewriteSetExecutionStategy( pn, M0a, M1, M2, M3, flagLIX );
//exec-type-specific rewrites
if( pn.getExecType() == ExecType.MR || pn.getExecType() == ExecType.SPARK )
{
if( M1 > _rm && M3 <= _rm ) {
// rewrite 1: data partitioning (apply conditional partitioning)
rewriteSetDataPartitioner( pn, ec.getVariables(), partitionedMatrices, M3 );
M1 = _cost.getEstimate(TestMeasure.MEMORY_USAGE, pn); //reestimate